// 此源代码的使用受BSD样式
// 许可证的约束，该许可证可以在许可证文件中找到。

// 为编译器导出的助手函数。
// 请勿在内部使用。

package types2

// 如果t是指针，指针将返回该类型，否则返回nil。
func AsPointer(t Type) *Pointer {
	u, _ := t.Underlying().(*Pointer)
	return u
}

// 如果t是签名，则AsSignature返回该类型，否则返回nil。
func AsSignature(t Type) *Signature {
	u, _ := t.Underlying().(*Signature)
	return u
}

// 如果typ是一个类型参数，则CoreType返回对应类型约束中所有类型的单个基础
// 类型（如果存在），否则返回
// nil。如果类型集只包含不受限制和受限制的
// 通道类型（具有相同的元素类型），则如果限制始终相同，则单个基础类型
// 为受限制的通道类型。
// 如果typ不是类型参数，则CoreType返回基础类型。
func CoreType(t Type) Type {
	return coreType(t)
}
